<?php
/**
 * 获取子树
 * @param  array 	$array 	待处理数据
 * @param  number 	$pid   	节点id
 * @param  string 	$key   	节点字段
 * @param  string 	$pkey  	父节点字段
 * @return array        	数据树
 */	
function getChildTree($array,$pid,$key,$pkey){
	$rarray = [];
	foreach ($array as $v) {
		if($v[$pkey] == $pid){
			$carray = getChildTree($array,$v[$key],$key,$pkey);
			$rarray[] = $carray?[
				'data'=>$v,
				'child'=>$carray
			]:[
				'data'=>$v
			];
		}
	}
	return $rarray;
}
/**
 * 获取可选字段数据树
 * @param  array  	$tree         	数据树
 * @param  array  	$fields       	保留字段
 * @param  bool   	$useKey       	是否使用下标映射
 * @param  string  	$status       	状态字段
 * @param  string  	$status_value 	状态值
 * @return array                	数据树
 */
function getTreeFields($tree,$fields=[],$useKey=false,$status='',$status_value=''){
	$rarray = [];
	foreach ($tree as $v) {
		$temp = [];
		$rtemp = [];
		foreach ($fields as $k1 => $v1) {
			if( $status && $v['data'][$status]!=$status_value ) {
				continue;
			}
			$v2 = $useKey?$k1:$v1;
			if($v['data'][$v1]){
				$temp[$v2] = $v['data'][$v1];
			}
		}
		$rtemp['data'] = $temp;
		if($v['child']){
			$rtemp['child'] = getTreeFields($v['child'],$fields,$useKey);
		}
		$rarray[] = $rtemp;
	}
	return $rarray;
}

/**
 * 数据数转二维数组
 * @param  array $tree 数据树
 * @return array       二维数组
 */
function treeToArray($tree){
	$rarray = [];
	foreach ($tree as $v) {
		$rarray[] = $v['data'];
		if($v['child']){
			$rarray = array_merge($rarray,treeToArray($v['child']));
		}
	}
	return $rarray;
}

/**
 * 获取可选字段二维数组
 * @param  array  	$tree         	二维数组
 * @param  array  	$fields       	保留字段
 * @param  bool   	$useKey       	是否使用下标映射
 * @param  string/array $status 	状态字段
 * @param  string  	$status_value 	状态值
 * @return array                	二维数组
 */
function getArrayFields($array,$fields=[],$useKey=false,$status='',$status_value=''){
	$rarray = [];
	foreach ($array as $v) {
		$temp = [];
		foreach ($fields as $k1 => $v1) {
			if( $status ) {
				if(is_array($status) && $v[$status[0]][$status[1]]!=$status_value){
					continue;	// 树结构数据是三维数组
				}else if($v[$status]!=$status_value){
					continue;	// 二维数组的
				}
			}
			$v2 = $useKey?$k1:$v1;
			if(isset($v[$v1])){
				$temp[$v2] = $v[$v1];
			}
		}
		$rarray[] = $temp;
	}
	return $rarray;
}
/**
 * 二维数组转一维
 * @param  array 	$array 	二维数组
 * @param  string 	$value  取值键
 * @param  string 	$key   	下标键
 * @return array        	一维数组
 */
function twoToOne($array,$value,$key){
	$rarray = [];
	if($key&&$value){
		foreach ($array as $k => $v) {
			$rarray[$v[$key]] = $v[$value];
		}	
	}else if($value){
		foreach ($array as $k => $v) {
			$rarray[] = $v[$value];
		}
	}else{
		foreach ($array as $k => $v) {
			$rarray = array_merge($rarray,$v);
		}
	}
	return $rarray;
}
/**
 * 数据映射
 * @param  array 	$array1 原数据
 * @param  array 	$array2 映射数组
 * @return array         	映射后数组
 */
function arrayMap($array1,$array2){
	$rarray = [];
	foreach ($array1 as $k => $v) {
		foreach ($array2 as $k1 => $v1) {
			$v[$k1] = $v1[$v[$k1]];
		}
		$rarray[$k] = $v;
	}
	return $rarray;
}
/**
 * 转化数组
 * @param  string/array  $data 	判断数据
 * @return array     			转化后的数据，索引标识
 */
function isIndex($data){
	$mark = true;
	if(!is_array($data)){
		if($data)
			$data = explode(',', $data);
		$mark = false;
	}
	return [$data,$mark];
}
/**
 * 返回数据
 * @param  mix    $data  数据
 * @return array         返回数据
 */
function returnData($data=[]){
	return [
		'total' => count($data),
		'rows' 	 => $data
	];
}